home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / WFC010.ZIP / INCLUDE / CSERVICE.HPP < prev    next >
C/C++ Source or Header  |  1995-12-07  |  3KB  |  107 lines

  1. #if ! defined( SERVICE_CLASS_HEADER )
  2.  
  3. /*
  4. ** Author: Samuel R. Blackburn
  5. ** CI$: 76300,326
  6. ** Internet: sammy@sed.csc.com
  7. **
  8. ** You can use it any way you like as long as you don't try to sell it.
  9. **
  10. ** Any attempt to sell WFC in source code form must have the permission
  11. ** of the original author. You can produce commercial executables with
  12. ** WFC but you can't sell WFC.
  13. **
  14. ** Copyright, 1995, Samuel R. Blackburn
  15. **
  16. ** $Workfile: $
  17. ** $Revision: $
  18. ** $Modtime: $
  19. */
  20.  
  21. #define SERVICE_CLASS_HEADER
  22.  
  23. extern CRITICAL_SECTION g_ServiceCriticalSection;
  24.  
  25. #define SERVICE_NAME_LEN   256
  26. #define ACCEPT_FLAGS ( SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_SHUTDOWN )
  27.  
  28. class CService : public CObject
  29. {
  30.    private:
  31.  
  32.       void m_Initialize( void );
  33.  
  34.    public:
  35.  
  36.       static CService *m_Service_p;
  37.  
  38.       CService( LPTHREAD_START_ROUTINE pThread, DWORD dwControlsAccepted = ACCEPT_FLAGS, DWORD dwWaitHint = 5000 );
  39.  
  40.       /*
  41.       ** Destructor should be virtual according to MSJ article in Sept 1992
  42.       ** "Do More with Less Code:..."
  43.       */
  44.  
  45.       virtual ~CService( void );
  46.  
  47.       virtual BOOL Initialize( LPCTSTR pName );
  48.       void LogEvent( WORD EventType = EVENTLOG_ERROR_TYPE, LPTSTR pMsgStr = 0, DWORD dwError = NO_ERROR );
  49.  
  50.    protected:
  51.  
  52.       HANDLE m_ExitEventHandle;
  53.       HANDLE m_ThreadHandle;
  54.  
  55.       DWORD m_ControlsAccepted;
  56.       DWORD m_CurrentState;
  57.       DWORD m_ErrorCode;
  58.       DWORD m_ThreadId;
  59.       DWORD m_WaitHint;
  60.  
  61.       LPTHREAD_START_ROUTINE m_ThreadStartRoutine;
  62.  
  63.       SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
  64.  
  65.       BOOL m_Debugging;
  66.       BOOL m_Running;
  67.       BOOL m_Paused;
  68.       BOOL m_Exiting;
  69.  
  70.       SERVICE_TABLE_ENTRY m_ServiceTable[ 2 ];
  71.  
  72.       char m_ServiceName[ SERVICE_NAME_LEN + 1 ];
  73.  
  74.       static void CALLBACK ServiceControlManagerHandler( DWORD dwControlCode );
  75.       static void CALLBACK ServiceMain( DWORD Argc, LPTSTR *argv );
  76.  
  77.       virtual void AssertValid( void ) const;
  78.       virtual void ParseCommandLineParameters( DWORD Argc, LPTSTR *Argv );
  79.       virtual void OnControlCode( DWORD dwControlCode );
  80.       virtual void OnStop( void );
  81.       virtual void OnPrepareServiceThread( void );
  82.       virtual void OnPause( void );
  83.       virtual void OnContinue( void );
  84.  
  85.       void Exit( void );
  86.  
  87.       BOOL SendStatusToServiceControlManager( DWORD CurrentState,
  88.                                               DWORD Win32ExitCode = NO_ERROR,
  89.                                               DWORD CheckPoint = 0, 
  90.                                               DWORD WaitHint = 0,
  91.                                               DWORD ServiceSpecificCode = NO_ERROR );
  92.  
  93. #if defined ( _DEBUG )
  94.    void DumpStatus( SERVICE_STATUS *pStatus ) const;
  95. #endif
  96.  
  97. private:
  98.  
  99.    // not-implemented:
  100. //   CNtService& operator= (const CNtService& rhs);  // assignment operator
  101.   // CNtService (const CNtService& rhs);             // copy constructor
  102.    //CNtService* operator& (void);                   // address-of operators
  103.    //const CNtService* operator& (void) const;
  104. };
  105.  
  106. #endif // SERVICE_CLASS_HEADER
  107.